package org.itzixi.rabbitmq;

import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * RabbitMQ配置类
 */
@Configuration
public class RabbitMQTestConfig {

    // 定义交换机名称
    public static final String TEST_EXCHANGE = "test_exchange";

    // 定义队列名称
    public static final String TEST_QUEUE = "test_queue";

    // 定义路由key
    public static final String ROUTING_KEY_TEST_SEND = "imooc.wechat.test.send";

    // 发送消息到消息队列接收并且保存到数据库的路由地址
    public static final String ROUTING_KEY_WECHAT_MSG_SEND = "imooc.wechat.wechat.msg.send";

    // 创建交换机
    @Bean(TEST_EXCHANGE)
    public Exchange exchange() {
        return ExchangeBuilder.topicExchange(TEST_EXCHANGE)
                .durable(true) // 持久化
                .build();
    }

    // 创建队列
    @Bean(TEST_QUEUE)
    public Queue queue() {
        return QueueBuilder.durable(TEST_QUEUE).build();
    }

    // 绑定队列和交换机
    @Bean
    public Binding binding(@Qualifier(TEST_EXCHANGE) Exchange exchange,
                           @Qualifier(TEST_QUEUE) Queue queue) {
        return BindingBuilder.bind(queue)
                .to(exchange)
                .with("imooc.wechat.#") // 路由key
                .noargs();
        // 绑定队列和交换机
        // 参数1：队列
        // 参数2：交换机
        // 参数3：路由key
        // 默认情况下，如果消息没有路由到对应的队列，则消息会被丢弃
    }
}
